#include <iostream>
using namespace std;

/*
	运算符重载的基本语法规则
	让两只猫对象可以相加，规定猫对象相加就是把年龄相加 
	运算符重载总结成公式：
	     返回值类型 operator运算符号(形参)
		 {
			 自己写
		 }
	总结：运算符重载本质就是个函数，这个函数有固定写法(名字必须叫做operator运算符号)
*/

class Cat
{
public:
	Cat(int _age)
	{
		age=_age;
	}
	/*
		问题1：如何确定返回值类型和形参？
		答案：依据运算表达式反推
		      int result=c1+c2; //人类的思维习惯
			  转换成函数调用的写法
			  int result=c1.operator+(c2) //函数调用的思维来写
	*/
	//猫类里面重载加法运算，让猫具备做加法的能力
	int operator+(Cat &other)
	{
		cout<<"加法重载被调用了"<<endl;
		return this->age+other.age;
	}
private:
	int age;
};

int main()
{
	Cat c1(5);
	Cat c2(7);
	
	//Cat c3=c1+5;
	//Cat c4=8+c2;
	
	//写法1：人类的思维习惯
	//int result=c1+c2;
	//写法2：函数调用的思维来写
	int result=c1.operator+(c2);
	cout<<"c1+c2 is: "<<result<<endl;
}